package com.fessc.develop.entity.comvo;

import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fessc.develop.utils.CcyConvert;
import com.fessc.develop.utils.NatConvert;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 跨境付汇推送（通用）
 */
@Data
public class SettleTradeSendBodyVo extends CommonDataSendVo {

    @JSONField(serialize = false)
    private Integer bankid;

    @JsonProperty("busiPlatNo")
    String orgCode; //交易平台编码

    @JsonProperty("orderNo")
    private String settleId;

    @JsonProperty("payInstNo")
    private String payInstNo;

    @JsonProperty("remitterNo")
    String coopOrgCode; //组织机构代码

    @JsonProperty("fillingName")
    String fillingRen; //申报人姓名

    @JsonProperty("fillingNo")
    String fillingNo; //申报人证件号

    @JsonProperty("idNo")
    String payerCredNo; //人脸识别身份证号

    @JsonProperty("payAcct")
    String payerAccountNo; //付款人账号

    @JsonProperty("costBear")
    String costbear;  //国内外费用承担

    @JsonProperty("domeOutlFlg")
    String domeOutlFlg = "2";  //境内外标识

    @JsonProperty("payType")
    String paytype;  //付款方式

    @JsonProperty("remitPurpose")
    String remitpurpose;  //汇款用途

    @JsonProperty("remitDate")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    LocalDateTime insertDate;  //汇款日期

    @JsonProperty("remitCcy")
    @JSONField(serializeUsing = CcyConvert.class)
    String payercurrency;  //汇款币种代码

    @JsonFormat(shape = JsonFormat.Shape.STRING)
    @JsonProperty("remitAmt")
    BigDecimal amount;  //汇款金额

    @JsonFormat(shape = JsonFormat.Shape.STRING)
    @JsonProperty("chargeAmt")
    BigDecimal costAmount;  //手续费

    @JsonProperty("remitterName")
    String payerAccountName;  //付款人账户名称

    @JsonProperty("remitterEnName")
    String remitterenname;  //汇款人英文名称

    @JsonProperty("remitterAddr")
    //String remitteraddr;  //汇款人地址
    String other2;  //汇款人英文地址

    @JsonProperty("spotAcct")
    String spotacct;  //现汇账户

    @JsonProperty("spotAmt")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    BigDecimal spotamt;  //现汇金额

    @JsonProperty("buyAcct")
    String buyacct;  //购汇账户

    @JsonProperty("buyAmt")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    BigDecimal buyamt;  //购汇金额

    @JsonProperty("buyRate")
    String buyrate;  //购汇汇率

    @JsonProperty("othAmt")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    BigDecimal otheramt;  //其他金额

    @JsonProperty("othCcy")
    @JSONField(serializeUsing = CcyConvert.class)
    String othercurrency;  //其他币种

    @JsonProperty("othBaseAcctNo")
    String otheracct;  //其他账户

    @JsonProperty("payeeAcct")
    String payeeAccountNo;  //收款人账户

    @JsonProperty("payeeName")
    //String payeeName;  //收款人名称
    String other3;  //收款人英文名称

    @JsonProperty("payeeAddr")
    //String payeeaddr;  //收款人地址
    String other4;  //收款人英文地址

    @JsonProperty("payeeBankName")
    //String payeeBankName;  //收款人开户行名称
    String other1;  //收款人开户行英文名称

    @JsonProperty("payeeBankSwiftCode")
    String payeebankswiftcode;  //收款人开户行swift code

    @JsonProperty("proxyBankName")
    String proxybankname;  //收款银行之代理行名称

    @JsonProperty("proxyBankSwiftCode")
    String proxybankswiftcode;  //收款银行之代理行SWIFT_CODE

    @JsonProperty("proxyBankAddr")
    String proxybankaddr;  //收款银行之代理行地址

    @JsonProperty("payeeBankAcctInProxy")
    String payeebankacctinproxy;  //收款银行之代理行名称

    @JsonProperty("payeeCountryCod")
    @JSONField(serializeUsing = NatConvert.class)
    String payeecountrycod;  //收款人常驻国家(地区)代码

    @JsonProperty("payeeCountry")
    String payeecountry;  //收款人常驻国家(地区)

    @JsonProperty("isBondedGoodsPay")
    String isbondedgoodspay;  //本笔款项是否为保税货物下付款

    @JsonProperty("contractNo")
    String contractNo;  //合同号

    @JsonProperty("invoiceNo")
    String invoiceno;  //发票号

    @JsonProperty("safeNo")
    String safeno;  //外汇局批件号/备案号/业务编号

    @JsonProperty("tranCod1")
    String trancod1;  //交易编码1代码

    @JsonProperty("relevantAmt1")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    BigDecimal relevantamt1;  //相应货币金额1

    @JsonProperty("trmo1")
    String trmo1;  //交易附言1

    @JsonProperty("tranCod2")
    String trancod2;  //交易编码2代码

    @JsonProperty("relevantAmt2")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    BigDecimal relevantamt2;  //相应货币金额2

    @JsonProperty("trmo2")
    String trmo2;  //交易附言1

    @JsonProperty("contactMane")
    String contactmane;  //业务联系人姓名

    @JsonProperty("contactPhone")
    String contactphone;  //业务联系人电话

    @JsonProperty("remitTrmo")
    String remittrmo;  //汇款附言

    @JsonProperty("remarks")
    String bankRemarks;  //银行备注

    @JsonProperty("fileId")
    String fileId;  //文件流水号

    @JsonProperty("saleOrder")
    List<SettleSaleOrderVo> saleOrderList;   //销售订单

    @JsonProperty("purchaseOrder")
    List<SettlePurchaseOrderVo> purchaseOrderList;  //采购订单


}
